//package org.kele.sc2020.proivder.config;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.amqp.core.*;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//
//@Slf4j
//@Configuration
//public class CustomRabbitMqConfig {
//
//    public final static String CONFIRM_QUEUE = "kelequeue";
//
//    public final static String CONFIRM_EXCHANGE = "amq.direct";
//
//    public final static String ROUTING_KEY = "kelekey";
//
//
//    @Bean("dtoqueue")
//    public Queue dtoqueue() {
//        return QueueBuilder.durable("dtoqueue").build();
//    }
//
//    @Bean
//    public Binding dtobinding() {
//        return BindingBuilder.bind(dtoqueue()).to(confirmExchange()).with("dtokey").noargs();
//    }
//
//    //-------------------------------------- confirm模式队列
//    @Bean("confirmQueue")
//    public Queue confirmQueue() {
//        // 死信队列和业务交换器的绑定 在声明 业务队列是设置参数, 业务队列-->死信队列  要求routingkey 一致性
//        return QueueBuilder.durable(CONFIRM_QUEUE).deadLetterExchange("dlxexchange").deadLetterRoutingKey(ROUTING_KEY).build();
//    }
//
//    @Bean("confirmExchange")
//    public Exchange confirmExchange() {
//        return ExchangeBuilder.directExchange(CONFIRM_EXCHANGE).build();
//    }
//
//    @Bean("confirmBinding")
//    public Binding confirmBinding() {
//        return BindingBuilder.bind(confirmQueue()).to(confirmExchange()).with(ROUTING_KEY).noargs();
//    }
//    //--------------------------------------------
//
//
//    //----------------------------------------------  死信队列绑定到死信交换机;
//    @Bean("dlxqueue")
//    public Queue dlxqueue() {
//        return QueueBuilder.durable("kele-dlx-queue").build();
//    }
//
//    @Bean("dlxexchange")
//    public Exchange dlxexchange() {
//        return ExchangeBuilder.directExchange("dlxexchange").build();
//    }
//
//    @Bean("confirmBindingDLX")
//    public Binding confirmBindingDLX() {
//        return BindingBuilder.bind(dlxqueue()).to(dlxexchange()).with(ROUTING_KEY).noargs();
//    }
////----------------------------------------------
//
//    @Resource
//    RabbitTemplate rabbitTemplate;
//
//
//    @PostConstruct
//    public void configRabbitCallback() {
//        // 消息抵达borker 会触发 confirm; 但是不能保证 投递到queue
//        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
//            if (!ack)
//                log.info("broker 接受信息 correlationData={}, cause={} ack={}", correlationData, cause, ack);
//        });
//
//        // 消息不能投递到queue的时候 触发此 returnscallback
//        rabbitTemplate.setReturnsCallback(returned -> log.info("消息投递失败:{}", returned));
//
//    }
//
//}
